/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.colegiatura.beans;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.apache.myfaces.custom.fileupload.UploadedFile;
import org.cip.esymons.colegiatura.adapters.RutaCarpetaReporte;
import org.cip.esymons.colegiatura.bc.ColegiadoDelegate;
import org.cip.esymons.colegiatura.bc.ColegiadoEspecialidadDelegate;
import org.cip.esymons.colegiatura.bc.ColegiadoImagenDelegate;
import org.cip.esymons.colegiatura.bc.DireccionDelegate;
import org.cip.esymons.colegiatura.bc.DirectivosDelegate;
import org.cip.esymons.colegiatura.bc.EspCapDelegate;
import org.cip.esymons.colegiatura.bc.ExperienciaLaboralDelegate;
import org.cip.esymons.colegiatura.bc.FormacionProfesionalDelegate;
import org.cip.esymons.colegiatura.bc.PersonaJuridicaDelegate;
import org.cip.esymons.colegiatura.bc.PersonaNaturalDelegate;
import org.cip.esymons.colegiatura.bc.PreInscripcionDelegate;
import org.cip.esymons.colegiatura.bc.TelefonoDelegate;
import org.cip.esymons.colegiatura.be.Colegiado;
import org.cip.esymons.colegiatura.be.ColegiadoImagen;
import org.cip.esymons.colegiatura.be.ExperienciaLaboral;
import org.cip.esymons.colegiatura.be.FormacionProfesional;
import org.cip.esymons.colegiatura.be.Preinscripcion;
import org.cip.esymons.colegiatura.be.TipoColegiado;
import org.cip.esymons.general.be.Capitulo;
import org.cip.esymons.general.be.ColegiadoEspecialidad;
import org.cip.esymons.general.be.DireccionPersona;
import org.cip.esymons.general.be.Directivos;
import org.cip.esymons.general.be.EspecialidadCapitulo;
import org.cip.esymons.general.be.PersonaJuridica;
import org.cip.esymons.general.be.PersonaNatural;
import org.cip.esymons.general.be.TelefonoSolicitante;
import org.cip.esymons.general.util.ControladorAbstracto;

/**
 *
 * @author WILLIAM GASTAÑUEDI CABALLERO
 */
public class ColegiadoTemporalController {

//DECLARACION DE CLASES.

    private PersonaJuridicaDelegate perJuridicaDelegado;
    private ColegiadoDelegate colegiadoDelegado;
    private ExperienciaLaboralDelegate expLabDelegado;
    private ColegiadoImagenDelegate delegadoImagen;
    private ColegiadoEspecialidadDelegate delegadoColEsp;
    private EspCapDelegate delegadoEspCap;
    private PreInscripcionDelegate delegadoPreinscripcion;
    private PersonaNaturalDelegate delegadoPersonaNatural;
    private DireccionDelegate delegadoDireccion;
    private TelefonoDelegate delegadoTelefono;
    private FormacionProfesionalDelegate delegadoFormacion;
    private DirectivosDelegate delegadoDirectivo;
   
    private Colegiado colegiado;
    private PersonaJuridica perJuridica;
    private TelefonoSolicitante telefono,telefonoEmp;
    private DireccionPersona direccion;
    private FormacionProfesional formacion;
    private ExperienciaLaboral experiencia;
    private TipoColegiado tipoColegiado;
    private ColegiadoEspecialidad colEsp;
    private EspecialidadCapitulo espCap;
    private Preinscripcion preinscripcion;
    private PersonaNatural personaNatural,persona;

    private ColegiadoImagen colImagen;
    private String dirImagen;
    private Capitulo capitulo;
    private List<EspecialidadCapitulo> listaEspCap;
    private List<ColegiadoImagen> listaColImagen;

    CodigoGenController codigoGen;
    private String genCodigo, autoCodigo;
    private boolean activo;
    private String destino;
    private String tabber;
    private Long codigoColegiado;
    private String nombreColegiado;
    private Boolean nuevaEmp;

//CONSTRUCTOR DE CLASES.
    public ColegiadoTemporalController() {

        perJuridicaDelegado = new PersonaJuridicaDelegate();
        colegiadoDelegado = new ColegiadoDelegate();
        expLabDelegado = new ExperienciaLaboralDelegate();
        delegadoImagen = new ColegiadoImagenDelegate();
        delegadoColEsp = new ColegiadoEspecialidadDelegate();
        delegadoEspCap = new EspCapDelegate();
        delegadoPreinscripcion = new PreInscripcionDelegate();
        delegadoPersonaNatural = new PersonaNaturalDelegate();
        delegadoDireccion = new DireccionDelegate();
        delegadoTelefono = new TelefonoDelegate();
        delegadoFormacion = new FormacionProfesionalDelegate();
        delegadoDirectivo = new DirectivosDelegate();       

        colegiado = new Colegiado();
        perJuridica = new PersonaJuridica();
        telefono = new TelefonoSolicitante();
        telefonoEmp = new TelefonoSolicitante();
        direccion = new DireccionPersona();
        formacion = new FormacionProfesional();
        experiencia = new ExperienciaLaboral();
        tipoColegiado = new TipoColegiado();
        colEsp = new ColegiadoEspecialidad();
        capitulo = new Capitulo();
        espCap = new EspecialidadCapitulo();
        preinscripcion = new Preinscripcion();
        personaNatural = new PersonaNatural();
        persona = new PersonaNatural();

        colImagen = new ColegiadoImagen();
        dirImagen = "/modulos/colegiatura/archivos/";

        listaEspCap = new ArrayList<EspecialidadCapitulo>();
        listaColImagen = new ArrayList<ColegiadoImagen>();

        activo = false;
        tabber = "personal";
        nuevaEmp = false;

    }

//GETTERS AND SETTERS
    public List<ColegiadoImagen> getListaColImagen() {
        return listaColImagen;
    }

    public void setListaColImagen(List<ColegiadoImagen> listaColImagen) {
        this.listaColImagen = listaColImagen;
    }

    public Boolean getNuevaEmp() {
        return nuevaEmp;
    }

    public void setNuevaEmp(Boolean nuevaEmp) {
        this.nuevaEmp = nuevaEmp;
    }   

    public DirectivosDelegate getDelegadoDirectivo() {
        return delegadoDirectivo;
    }

    public void setDelegadoDirectivo(DirectivosDelegate delegadoDirectivo) {
        this.delegadoDirectivo = delegadoDirectivo;
    }

    public String getNombreColegiado() {
        return nombreColegiado;
    }

    public void setNombreColegiado(String nombreColegiado) {
        this.nombreColegiado = nombreColegiado;
    }

    public Long getCodigoColegiado() {
        return codigoColegiado;
    }

    public void setCodigoColegiado(Long codigoColegiado) {
        this.codigoColegiado = codigoColegiado;
    }

    public FormacionProfesionalDelegate getDelegadoFormacion() {
        return delegadoFormacion;
    }

    public void setDelegadoFormacion(FormacionProfesionalDelegate delegadoFormacion) {
        this.delegadoFormacion = delegadoFormacion;
    }

    public DireccionDelegate getDelegadoDireccion() {
        return delegadoDireccion;
    }

    public void setDelegadoDireccion(DireccionDelegate delegadoDireccion) {
        this.delegadoDireccion = delegadoDireccion;
    }

    public TelefonoDelegate getDelegadoTelefono() {
        return delegadoTelefono;
    }

    public void setDelegadoTelefono(TelefonoDelegate delegadoTelefono) {
        this.delegadoTelefono = delegadoTelefono;
    }

    public String getTabber() {
        return tabber;
    }

    public void setTabber(String tabber) {
        this.tabber = tabber;
    }

    public String getDestino() {
        return destino;
    }

    public void setDestino(String destino) {
        this.destino = destino;
    }

    public boolean getActivo() {
        return activo;
    }

    public void setActivo(boolean activo) {
        this.activo = activo;
    }

    public String getGenCodigo() {
        return genCodigo;
    }

    public void setGenCodigo(String genCodigo) {
        this.genCodigo = genCodigo;
    }

    public PersonaNatural getPersona() {
        return persona;
    }

    public void setPersona(PersonaNatural persona) {
        this.persona = persona;
    }

    public PersonaNaturalDelegate getDelegadoPersonaNatural() {
        return delegadoPersonaNatural;
    }

    public void setDelegadoPersonaNatural(PersonaNaturalDelegate delegadoPersonaNatural) {
        this.delegadoPersonaNatural = delegadoPersonaNatural;
    }

    public PersonaNatural getPersonaNatural() {
        return personaNatural;
    }

    public void setPersonaNatural(PersonaNatural personaNatural) {
        this.personaNatural = personaNatural;
    }

    public PreInscripcionDelegate getDelegadoPreinscripcion() {
        return delegadoPreinscripcion;
    }

    public void setDelegadoPreinscripcion(PreInscripcionDelegate delegadoPreinscripcion) {
        this.delegadoPreinscripcion = delegadoPreinscripcion;
    }

    public Preinscripcion getPreinscripcion() {
        return preinscripcion;
    }

    public void setPreinscripcion(Preinscripcion preinscripcion) {
        this.preinscripcion = preinscripcion;
    }

    public EspCapDelegate getDelegadoEspCap() {
        return delegadoEspCap;
    }

    public void setDelegadoEspCap(EspCapDelegate delegadoEspCap) {
        this.delegadoEspCap = delegadoEspCap;
    }

    public EspecialidadCapitulo getEspCap() {
        return espCap;
    }

    public void setEspCap(EspecialidadCapitulo espCap) {
        this.espCap = espCap;
    }

    public Capitulo getCapitulo() {
        return capitulo;
    }

    public void setCapitulo(Capitulo capitulo) {
        this.capitulo = capitulo;
    }

    public ColegiadoEspecialidad getColEsp() {
        return colEsp;
    }

    public void setColEsp(ColegiadoEspecialidad colEsp) {
        this.colEsp = colEsp;
    }

    public ColegiadoEspecialidadDelegate getDelegadoColEsp() {
        return delegadoColEsp;
    }

    public void setDelegadoColEsp(ColegiadoEspecialidadDelegate delegadoColEsp) {
        this.delegadoColEsp = delegadoColEsp;
    }

    public Colegiado getColegiado() {
        return colegiado;
    }

    public void setColegiado(Colegiado colegiado) {
        this.colegiado = colegiado;
    }

    public ColegiadoDelegate getColegiadoDelegado() {
        return colegiadoDelegado;
    }

    public void setColegiadoDelegado(ColegiadoDelegate colegiadoDelegado) {
        this.colegiadoDelegado = colegiadoDelegado;
    }

    public DireccionPersona getDireccion() {
        return direccion;
    }

    public void setDireccion(DireccionPersona direccion) {
        this.direccion = direccion;
    }

    public ExperienciaLaboralDelegate getExpLabDelegado() {
        return expLabDelegado;
    }

    public void setExpLabDelegado(ExperienciaLaboralDelegate expLabDelegado) {
        this.expLabDelegado = expLabDelegado;
    }

    public ExperienciaLaboral getExperiencia() {
        return experiencia;
    }

    public void setExperiencia(ExperienciaLaboral experiencia) {
        this.experiencia = experiencia;
    }

    public FormacionProfesional getFormacion() {
        return formacion;
    }

    public void setFormacion(FormacionProfesional formacion) {
        this.formacion = formacion;
    }

    public PersonaJuridica getPerJuridica() {
        return perJuridica;
    }

    public void setPerJuridica(PersonaJuridica perJuridica) {
        this.perJuridica = perJuridica;
    }

    public PersonaJuridicaDelegate getPerJuridicaDelegado() {
        return perJuridicaDelegado;
    }

    public void setPerJuridicaDelegado(PersonaJuridicaDelegate perJuridicaDelegado) {
        this.perJuridicaDelegado = perJuridicaDelegado;
    }

    public TelefonoSolicitante getTelefono() {
        return telefono;
    }

    public void setTelefono(TelefonoSolicitante telefono) {
        this.telefono = telefono;
    }

    public TelefonoSolicitante getTelefonoEmp() {
        return telefonoEmp;
    }

    public void setTelefonoEmp(TelefonoSolicitante telefonoEmp) {
        this.telefonoEmp = telefonoEmp;
    }

    public TipoColegiado getTipoColegiado() {
        return tipoColegiado;
    }

    public void setTipoColegiado(TipoColegiado tipoColegiado) {
        this.tipoColegiado = tipoColegiado;
    }

    public ColegiadoImagen getColImagen() {
        return colImagen;
    }

    public void setColImagen(ColegiadoImagen colImagen) {
        this.colImagen = colImagen;
    }

    public ColegiadoImagenDelegate getDelegadoImagen() {
        return delegadoImagen;
    }

    public void setDelegadoImagen(ColegiadoImagenDelegate delegadoImagen) {
        this.delegadoImagen = delegadoImagen;
    }

    public String nuevo(){       

        return "ir_a_nuevoTemp";
    }

//METODO QUE REALIZA EL PROCESO DE REGISTRO DE UN NUEVO PREINSCRITO DE TIPO
//TEMPORAL.
    public String grabar(){

//        persona = delegadoPersonaNatural.buscaXPasaporte(personaNatural.getPerNroPasaporte());
//        if(persona != null){
//
//            persona.setPerTipo(2);
//            //0=NO COLEGIADO; 1=COLEGIADO; 2=PREINSCRITO; 3=NUEVO
//            persona.setPerActivo(true);
//            persona.setPerfechaRegistro(new Date());
//            persona.setPertieneImagen(false);
//            delegadoPersonaNatural.edit(persona);
//
//            colegiado.setPersonaNatural(persona);
//            colegiado.setColestaVivo(true);
//            tipoColegiado.setTcoCodigo(3); //tipoCol temporal
//            colegiado.setTipoColegiado(tipoColegiado);
//            colegiadoDelegado.create(colegiado);
//
//        }else{

            personaNatural.setPerTipo(2);
            //0=NO COLEGIADO; 1=COLEGIADO; 2=PREINSCRITO; 3=NUEVO
            personaNatural.setPerActivo(true);
            personaNatural.setPerfechaRegistro(new Date());
            personaNatural.setPertieneImagen(false);
            delegadoPersonaNatural.create(personaNatural);

            colegiado.setSolCodigo(personaNatural.getSolCodigo());
            colegiado.setPersonaNatural(personaNatural);
            colegiado.setColestaVivo(true);
            tipoColegiado.setTcoCodigo(3); //tipoCol temporal
            colegiado.setTipoColegiado(tipoColegiado);
            colegiadoDelegado.create(colegiado);
//        }
        
        //asiganamos la direccion al colegiado
        direccion.setSolCodigo(personaNatural);
        direccion.setDpeActivo(true);
        delegadoDireccion.create(direccion);
//        colegiado.getPersonaNatural().getListaDirecciones().add(direccion);
//        colegiadoDelegado.edit(colegiado); //corregir direccion y telefonos

        //asignamos el telefono al colegiado
        
        telefono.setSolCodigo(personaNatural);
        telefono.setTsoEstado(true);
        delegadoTelefono.create(telefono);
//        telefono.setTsotipoTelefono("Fijo");
//        colegiado.getPersonaNatural().getTelefonoSolicitanteCollection().add(telefono);
//        colegiadoDelegado.edit(colegiado);
        
        //creamos formacion profesional
        formacion.setColegiado(colegiado);
        delegadoFormacion.create(formacion);
//        colegiado.getListaFormacion().add(formacion);
//
//        //editamos colegiado para actualizar los cambios
//        colegiadoDelegado.edit(colegiado);
       
        //creamos la personaJuridica (Empresa)
        if(nuevaEmp){
            if(perJuridica.getEmprazonSocial()!=null || !perJuridica.getEmprazonSocial().isEmpty()){
                perJuridica.setEmpEsBanco(false);
                perJuridicaDelegado.create(perJuridica);

                //asignamos el telefono a la empresa
                telefonoEmp.setSolCodigo(perJuridica);
                telefonoEmp.setTsoEstado(true);
                telefonoEmp.setTsotipoTelefono("Fijo");
                delegadoTelefono.create(telefonoEmp);
            }
        }

//        //creamos la experiencia laboral
//        experiencia.setColCodigo(colegiado);
//        experiencia.setEmpCodigo(perJuridica);
//        expLabDelegado.create(experiencia);

        //ASIGNAMOS EL CAPITULO AL COLEGIADO TEMPORAL

        listaEspCap = delegadoEspCap.buscaPorCapitulo(capitulo);
        espCap = listaEspCap.get(0);
        colEsp.setColCodigo(colegiado);
        colEsp.setCesActivo(true);
        colEsp.setCesPrioridad(true);
        colEsp.setEcaCodigo(espCap);
        delegadoColEsp.create(colEsp);

        //REGISTRAR PREINSCRIPCION

        preinscripcion.setEmpCodigo(perJuridica);
        preinscripcion.setEcaCodigo(espCap);
        preinscripcion.setFopCodigo(formacion);
        preinscripcion.setPerCodigo(personaNatural);
        preinscripcion.setPreEstado(true);
        preinscripcion.setPrefechaInscripcion(new Date());
        delegadoPreinscripcion.create(preinscripcion);

        codigoColegiado = colegiado.getPersonaNatural().getSolCodigo();
        nombreColegiado = colegiado.getPersonaNatural().getNombreCompleto();

//        validarCodigo();
        destino = "subir_docTemp";

        return destino;//"subir_docTemp";
    }

//METODO QUE PERMITE VALIDAR SI EL CODIGO INGRESO ES EL MISMO DEL CODIGO
//AUTOGENERADO.DE NO SER EL MISMO SE AUTOREFRESCARA PARA GENERAR UN NUEVO CODIGO.
    public String validarCodigo(){

    CodeGeneratorController control = (CodeGeneratorController) ControladorAbstracto.getBean("CodeGeneratorController");
    String codigoGenerado = control.getCodigoGenerado();

        if(genCodigo.compareTo(codigoGenerado)==0){
            tabber = "personal";
            genCodigo = "";
            destino = "subir_docTemp";
        }else{
        genCodigo = "";
        activo = true;
        destino = null;
        }
      return null;
    }

//METODO INVOCADO EN EL FORMULARIO WEB PARA VALIDAR EL CODIGO DE SEGURIDAD.
    public String validaCodigo(){

        validarCodigo();
        return destino;
    }

    private UploadedFile upFile;
    boolean rendSuccess = false;
    boolean rendFailure = false;
    private String imagen;

    public boolean isRendFailure() {
        return rendFailure;
    }

    public void setRendFailure(boolean rendFailure) {
        this.rendFailure = rendFailure;
    }

    public boolean isRendSuccess() {
        return rendSuccess;
    }

    public void setRendSuccess(boolean rendSuccess) {
        this.rendSuccess = rendSuccess;
    }

    public UploadedFile getUpFile() {
        return upFile;
    }

    public void setUpFile(UploadedFile upFile) {
        this.upFile = upFile;
    }

    public String getImagen() {
        return imagen;
    }

    public void setImagen(String imagen) {
        this.imagen = imagen;
    }

//METODO QUE PERMITE A LOS INGENIEROS QUE SE PREINSCRIBEN SUBIR AL SERVIDOR LOS
//ARCHIVOS DIGITALIZADOS DE SU DOCUMENTACION QUE SE LES SOLICITO.
    public String upload() throws IOException {
        String extension;
        try {
                //validar el tipo de imagen
                if(colImagen.getTimCodigo().getTimCodigo()==1){
                   dirImagen=dirImagen.concat("fotos/");
                }else{
                    if(colImagen.getTimCodigo().getTimCodigo()==4){
                        dirImagen=dirImagen.concat("tituloFrente/");
                    }else{
                        if(colImagen.getTimCodigo().getTimCodigo()==5){
                           dirImagen=dirImagen.concat("tituloEspalda/");
                        }else{
                            if(colImagen.getTimCodigo().getTimCodigo()==9){
                                dirImagen=dirImagen.concat("firma/");
                            }else{
                                if(colImagen.getTimCodigo().getTimCodigo()==8){
                                   dirImagen=dirImagen.concat("carnet/");
                                }
                            }
                        }
                    }
                }

                extension = upFile.getName().substring(upFile.getName().length()-4,upFile.getName().length());
                InputStream stream = upFile.getInputStream();
                dirImagen = dirImagen.concat(colegiado.getPersonaNatural().getPerNroPasaporte().concat(extension));
                OutputStream out=new FileOutputStream(dirImagen);
                long size = upFile.getSize();
                byte[] buffer = new byte[(int) size];
                stream.read(buffer, 0, (int) size);
                out.write(buffer, 0, (int) size);
                stream.close();
                out.close();
                guardaImagen();
                rendSuccess = true;
                rendFailure = false;
//                setImagen(upFile.getName());
                System.out.println("File Upload Successful.");
                return "ok";

        } catch (Exception ioe) {
            System.out.println("File Upload Unsuccessful.");
            System.out.println("errorrrr" + ioe.toString());
            rendSuccess = false;
            rendFailure = true;
            return "no";
        }
    }

//METODO QUE ALMACENA LOS REGISTROS Y RUTAS DE LOS ARCHIVOS QUE SE ALMACENAN EN
//EN LE SERVIDOR.
    public String guardaImagen(){
     //almacenamos las imagenes del colegiado

        try{
             colImagen.setColCodigo(colegiado);
             colImagen.setCimRuta(dirImagen);
             colImagen.setCimFechaRegistro(new Date());
             delegadoImagen.create(colImagen);

             personaNatural.setPertieneImagen(true);
             delegadoPersonaNatural.edit(personaNatural);
             colImagen = new ColegiadoImagen();
             dirImagen = "/modulos/colegiatura/archivos/";
             getListaPorColegiado();
             return null;

        }catch(Exception ex){
            getListaPorColegiado();
            return null;
        }
    }

//METODO QUE PERMITE LISTAR LAS IMAGENES QUE ADJUNTO UN INGENIERO COLEGIADO.
    public List<ColegiadoImagen> getListaPorColegiado(){

        listaColImagen = new ArrayList<ColegiadoImagen>();
        return listaColImagen = delegadoImagen.listaPorColegiado(colegiado);
    }

    public String siguiente(){

        return "docTemporal";
    }

    public String cambiaEstado(){

        if(nuevaEmp){
            nuevaEmp = false;
            perJuridica = new PersonaJuridica();
        }else{
            nuevaEmp = true;
            perJuridica = new PersonaJuridica();
        }
        return null;
    }

//METODO QUE PERMITE INICIALIZAR LAS CLASES DESPUES DE TERMINAR EL PROCESO DE PREINSCRIPCION.
    public String Terminar(){

        colegiado = new Colegiado();
        perJuridica = new PersonaJuridica();
        telefono = new TelefonoSolicitante();
        telefonoEmp = new TelefonoSolicitante();
        direccion = new DireccionPersona();
        formacion = new FormacionProfesional();
        experiencia = new ExperienciaLaboral();
        tipoColegiado = new TipoColegiado();
        colEsp = new ColegiadoEspecialidad();
        capitulo = new Capitulo();
        espCap = new EspecialidadCapitulo();
        preinscripcion = new Preinscripcion();
        personaNatural = new PersonaNatural();
        persona = new PersonaNatural();
        colImagen = new ColegiadoImagen();
        tabber  = "personal";
        nuevaEmp = false;
        return "mensaje";
    }

//METODO QUE PERMITE INICIALIZAR LAS CLASES.
    public String Limpiar(){

        colegiado = new Colegiado();
        perJuridica = new PersonaJuridica();
        telefono = new TelefonoSolicitante();
        telefonoEmp = new TelefonoSolicitante();
        direccion = new DireccionPersona();
        formacion = new FormacionProfesional();
        experiencia = new ExperienciaLaboral();
        tipoColegiado = new TipoColegiado();
        colEsp = new ColegiadoEspecialidad();
        capitulo = new Capitulo();
        espCap = new EspecialidadCapitulo();
        preinscripcion = new Preinscripcion();
        personaNatural = new PersonaNatural();
        persona = new PersonaNatural();
        colImagen = new ColegiadoImagen();
        tabber = "personal";
        nuevaEmp = false;
        return null;
    }

//GENERAR FICHA PREINSCRIPCION TEMPORAL

   private Preinscripcion preInscripcion = new Preinscripcion();
   private DireccionPersona direccionPreinscrito = new DireccionPersona();
   List<TelefonoSolicitante> listaTelefono = new ArrayList<TelefonoSolicitante>();
   List<TelefonoSolicitante> listaCelular = new ArrayList<TelefonoSolicitante>();
   List<TelefonoSolicitante> listaTelefonoEmp = new ArrayList<TelefonoSolicitante>();
   private Directivos presidente = new Directivos();
   private Directivos vocal1 = new Directivos();
   private Directivos vocal2 = new Directivos();
   private Directivos decano = new Directivos();

    public Directivos getDecano() {
        return decano;
    }

    public void setDecano(Directivos decano) {
        this.decano = decano;
    }

    public DireccionPersona getDireccionPreinscrito() {
        return direccionPreinscrito;
    }

    public void setDireccionPreinscrito(DireccionPersona direccionPreinscrito) {
        this.direccionPreinscrito = direccionPreinscrito;
    }

    public List<TelefonoSolicitante> getListaCelular() {
        return listaCelular;
    }

    public void setListaCelular(List<TelefonoSolicitante> listaCelular) {
        this.listaCelular = listaCelular;
    }

    public List<EspecialidadCapitulo> getListaEspCap() {
        return listaEspCap;
    }

    public void setListaEspCap(List<EspecialidadCapitulo> listaEspCap) {
        this.listaEspCap = listaEspCap;
    }

    public List<TelefonoSolicitante> getListaTelefono() {
        return listaTelefono;
    }

    public void setListaTelefono(List<TelefonoSolicitante> listaTelefono) {
        this.listaTelefono = listaTelefono;
    }

    public List<TelefonoSolicitante> getListaTelefonoEmp() {
        return listaTelefonoEmp;
    }

    public void setListaTelefonoEmp(List<TelefonoSolicitante> listaTelefonoEmp) {
        this.listaTelefonoEmp = listaTelefonoEmp;
    }

    public Preinscripcion getPreInscripcion() {
        return preInscripcion;
    }

    public void setPreInscripcion(Preinscripcion preInscripcion) {
        this.preInscripcion = preInscripcion;
    }

    public Directivos getPresidente() {
        return presidente;
    }

    public void setPresidente(Directivos presidente) {
        this.presidente = presidente;
    }

    public Directivos getVocal1() {
        return vocal1;
    }

    public void setVocal1(Directivos vocal1) {
        this.vocal1 = vocal1;
    }

    public Directivos getVocal2() {
        return vocal2;
    }

    public void setVocal2(Directivos vocal2) {
        this.vocal2 = vocal2;
    }

//METODO QUE PERMITE GENERAR LA FICHA DE PREINSCRIPCION (FRENTE) EN FORMATO .PDF
//Y ALMACENARLA EN EL SERVIDOR EN UNA CARPETA ASIGNADA
   @SuppressWarnings("static-access")
    public String exportarFichaPreInscripcionTemporal() {

        Map parametros = new HashMap();
        
     try{
//        try{
            preInscripcion = new Preinscripcion();
            direccionPreinscrito = new DireccionPersona();
            listaTelefono = new ArrayList<TelefonoSolicitante>();
            listaCelular = new ArrayList<TelefonoSolicitante>();
            listaTelefonoEmp = new ArrayList<TelefonoSolicitante>();

            preInscripcion = delegadoPreinscripcion.buscaPreInscripcion(codigoColegiado);
            direccionPreinscrito = delegadoDireccion.buscaDireccionColegiado(preInscripcion.getPerCodigo().getSolCodigo());
            listaTelefono = delegadoTelefono.listaFijos(preInscripcion.getPerCodigo().getSolCodigo());
            listaCelular = delegadoTelefono.listaCelular(preInscripcion.getPerCodigo().getSolCodigo());
            colegiado = colegiadoDelegado.buscaColegiado(preInscripcion.getPerCodigo().getSolCodigo());

            System.out.println("listaTelefono : "+listaTelefono.size());
            System.out.println("listaCelular : "+listaCelular.size());
            System.out.println("direccion : "+direccionPreinscrito.getDpeDireccion());

            if(preInscripcion.getEmpCodigo().getSolCodigo() != null){
                listaTelefonoEmp = delegadoTelefono.listaFijos(preInscripcion.getEmpCodigo().getSolCodigo());
//                System.out.println("listaTelefonoEmp : "+listaTelefonoEmp.size());
                if(listaTelefonoEmp.size()<=0){
                    listaTelefonoEmp = new ArrayList<TelefonoSolicitante>();
                    String numEmp = "";                   
                    parametros.put("numEmp", numEmp);
                }else{                   
                    String numEmp = listaTelefonoEmp.get(0).getTsoCodciudad()+" - "+listaTelefonoEmp.get(0).getTsoNumero();
                    parametros.put("numEmp", numEmp);
                }
            }            
           
            if(listaCelular.size()<=0){
                listaCelular = new ArrayList<TelefonoSolicitante>();
                String numCelular = "";                
                parametros.put("numCelular", numCelular);
            }else{                
                String numCelular = listaCelular.get(0).getTsoCodciudad()+" - "+listaCelular.get(0).getTsoNumero();
                parametros.put("numCelular", numCelular);
            }
         
           if(listaTelefono.size()<=0){
                  listaTelefono = new ArrayList<TelefonoSolicitante>();
                  String telefonoIns = "";                  
                  parametros.put("telefonoIns", telefonoIns);
            }else{                  
                  String telefonoIns = listaTelefono.get(0).getTsoCodciudad()+" - "+listaTelefono.get(0).getTsoNumero();
                  parametros.put("telefonoIns", telefonoIns);
            }           
            if(direccionPreinscrito == null){
                String direccion1 = "";
                parametros.put("direccion", direccion1);
            }
            else{
                String direccion1 = direccionPreinscrito.getDpeDireccion();                
                parametros.put("direccion", direccion1);
            }

//        }catch(Exception ex){
////           return null;
//            String numEmp1 = "";
//            parametros.put("numEmp", numEmp1);
//
//            String numCelular1 = "";
//            parametros.put("numCelular", numCelular1);
//
//            String telefonoIns1 = "";
//            parametros.put("telefonoIns", telefonoIns1);
//
//            String direccion2 = "";
//            parametros.put("direccion", direccion2);
//
//        }
        List listaPre = new ArrayList();
        listaPre.add(preInscripcion);
        String nombreFicha = preInscripcion.getPerCodigo().getNombreCompleto();

        //DECLARACION DE PARAMETROS
        String pais = colegiado.getPais().getPaiDescripcion();
        parametros.put("pais", pais);
        String empresa = preInscripcion.getEmpCodigo().getEmprazonSocial();
        parametros.put("empresa", empresa);

        if (listaPre.size() > 0) {
            RutaCarpetaReporte ruta = new RutaCarpetaReporte();
            String rutaJasper = "", rutaPDF = "";
            rutaJasper = ruta.getRutaReporte() + "rptPreinscripcionTemporal.jasper";
//            rutaPDF = ruta.getRuta() + "rptPreinscripcionTemporal.pdf";//ruta windows prueba
            rutaPDF = ruta.getRutaPDF() + "frenteFicha/"+ nombreFicha+"-Tem/Frente.pdf"; //"rptPreinscripcionTemporal.pdf";//ruta linux prueba
            //logo windows:         C:/Reportes/logocipcdll.gif
            //rutaPDF = ruta.getRutaPDF() + "rptFormato.pdf";   //ruta linux server
            //logo linux:          /root/Desktop/pdf/logocipcdll.gif
            try {
                HttpServletRequest request = ControladorAbstracto.getRequest();
                rutaJasper = request.getRealPath(rutaJasper);
            //rutaPDF = request.getRealPath(rutaPDF);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }

            try {
                File entrada = new File(rutaJasper);
                JasperPrint print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaPre));
                if (ruta.generarPDF(rutaPDF, print)) {
                }
            } catch (Exception e) {
                System.out.println("-------" + e.toString());
            }
        } else {
            mostrarMensaje("Error", "Deben existir datos en la Lista para exportar", FacesMessage.SEVERITY_ERROR);
        }
     }catch(Exception ex){
         return null;
     }
        return "";
    }


   // GENERAR FICHA DE PREINSCRIPCION TEMPORAL ESPALDA EN FORMATO .PDF
   //Y ALMACENARLA EN EL SERVIDOR EN UNA CARPETA ASIGNADA

   @SuppressWarnings("static-access")
    public String exportarFichaPreInscripcionTemporalEspalda() {

        Map parametros = new HashMap();       

        try{
            preInscripcion = new Preinscripcion();
            presidente = new Directivos();
            vocal1 = new Directivos();
            vocal2 = new Directivos();
            decano = new Directivos();

            preInscripcion = delegadoPreinscripcion.buscaPreInscripcion(codigoColegiado);
            presidente = delegadoDirectivo.buscaPresidente();
            vocal1 = delegadoDirectivo.buscaPrimerVocal();
            vocal2 = delegadoDirectivo.buscaSegundoVocal();
            decano = delegadoDirectivo.buscaDecano();

        List listaPre = new ArrayList();
        listaPre.add(preInscripcion);

        String nombreFicha = preInscripcion.getPerCodigo().getNombreCompleto();

        //DECLARACION DE PARAMETROS

       String nombPresidente = presidente.getColCodigo().getPersonaNatural().getNombreApellidoTemporal();
       String nroCipPresidente = presidente.getColCodigo().getColnumeroCip();
       String nombCompletoPresid = presidente.getColCodigo().getPersonaNatural().getNombreCompleto();

       String nombVocal1 = vocal1.getColCodigo().getPersonaNatural().getNombreApellidoTemporal();
       String nroCipVocal1 = vocal1.getColCodigo().getColnumeroCip();

       String nombVocal2 = vocal2.getColCodigo().getPersonaNatural().getNombreApellidoTemporal();
       String nroCipVocal2 = vocal2.getColCodigo().getColnumeroCip();

       String nombDecano = decano.getColCodigo().getPersonaNatural().getNombreCompleto();
       String nroCipDecano = decano.getColCodigo().getColnumeroCip();

        //ENVIO DE PARAMETROS

        parametros.put("nombPresidente", nombPresidente);
        parametros.put("nroCipPresidente", nroCipPresidente);
        parametros.put("nombCompletoPresid", nombCompletoPresid);
        parametros.put("nombVocal1", nombVocal1);
        parametros.put("nroCipVocal1", nroCipVocal1);
        parametros.put("nombVocal2", nombVocal2);
        parametros.put("nroCipVocal2", nroCipVocal2);
        parametros.put("nombDecano", nombDecano);
        parametros.put("nroCipDecano", nroCipDecano);


        if (listaPre.size() > 0) {
            RutaCarpetaReporte ruta = new RutaCarpetaReporte();
            String rutaJasper = "", rutaPDF = "";
            rutaJasper = ruta.getRutaReporte() + "rptPreinscripcionTemporalEspalda.jasper";
//            rutaPDF = ruta.getRuta() + "rptPreinscripcionTemporalEspalda.pdf";//ruta windows prueba
            rutaPDF = ruta.getRutaPDFpreInscripcion()+"espaldaFicha/"+ nombreFicha+"-Tem/Espalda.pdf"; //"rptPreinscripcionTemporalEspalda.pdf";//ruta linux prueba
            //logo windows:         C:/Reportes/logocipcdll.gif
            //rutaPDF = ruta.getRutaPDF() + "rptFormato.pdf";   //ruta linux server
            //logo linux:          /root/Desktop/pdf/logocipcdll.gif
            try {
                HttpServletRequest request = ControladorAbstracto.getRequest();
                rutaJasper = request.getRealPath(rutaJasper);
            //rutaPDF = request.getRealPath(rutaPDF);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }

            try {
                File entrada = new File(rutaJasper);
                JasperPrint print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaPre));
                if (ruta.generarPDF(rutaPDF, print)) {
                }
            } catch (Exception e) {
                System.out.println("-------" + e.toString());
            }
        } else {
            mostrarMensaje("Error", "Deben existir datos en la Lista para exportar", FacesMessage.SEVERITY_ERROR);
        }
       }catch(Exception ex){
            return null;
      }
        return "";
    }

//METODO QUE PERMITE GENERAR LA FICHA DE FIRMA Y SELLO EN FORMATO .PDF
//Y ALMACENARLA EN EL SERVIDOR EN UNA CARPETA ASIGNADA
    @SuppressWarnings("static-access")
    public String exportarFichaFirmaSello() {

        Map parametros = new HashMap();

        try{
            preInscripcion = new Preinscripcion();
            preInscripcion = delegadoPreinscripcion.buscaPreInscripcion(codigoColegiado);

        List listaPre = new ArrayList();
        listaPre.add(preInscripcion);

        HttpServletRequest request1 = ControladorAbstracto.getRequest();
        String Imagen = "/imagenColegiatura/logocipcdll.gif";
        String logo = request1.getRealPath(Imagen);
        parametros.put("logo", logo);
        String nombreFicha = preInscripcion.getPerCodigo().getNombreCompleto();

        if (listaPre.size() > 0) {
            RutaCarpetaReporte ruta = new RutaCarpetaReporte();
            String rutaJasper = "", rutaPDF = "";
            rutaJasper = ruta.getRutaReporte() + "rptFichaFirmaSello.jasper";
//            rutaPDF = ruta.getRuta() + "rptFichaFirmaSello.pdf";//ruta windows prueba
            rutaPDF = ruta.getRutaPDFpreInscripcion()+"firmaSello/"+nombreFicha+"-FirmaSello.pdf";
//            rutaPDF = ruta.getRutaPDF() + "rptFichaFirmaSello.pdf";//ruta linux prueba
            //logo windows:         C:/Reportes/logocipcdll.gif
            //rutaPDF = ruta.getRutaPDF() + "rptFormato.pdf";   //ruta linux server
            //logo linux:          /root/Desktop/pdf/logocipcdll.gif
            try {
                HttpServletRequest request = ControladorAbstracto.getRequest();
                rutaJasper = request.getRealPath(rutaJasper);
            //rutaPDF = request.getRealPath(rutaPDF);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }

            try {
                File entrada = new File(rutaJasper);
                JasperPrint print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaPre));
                if (ruta.generarPDF(rutaPDF, print)) {
                }
            } catch (Exception e) {
                System.out.println("-------" + e.toString());
            }
        } else {
            mostrarMensaje("Error", "Deben existir datos en la Lista para exportar", FacesMessage.SEVERITY_ERROR);
        }
      }catch(Exception ex){
            return null;
     }
        return "";
    }

    // GENERAR FICHA DE CARNET DE COLEGIADO EN FORMATO .PDF
    //Y ALMACENARLA EN EL SERVIDOR EN UNA CARPETA ASIGNADA

    @SuppressWarnings("static-access")
    public String exportarFichaCarnet() {

        Map parametros = new HashMap();

        try{
            preInscripcion = new Preinscripcion();
        preInscripcion = delegadoPreinscripcion.buscaPreInscripcion(codigoColegiado);

        List listaPre = new ArrayList();
        listaPre.add(preInscripcion);
        String nombreFicha = preInscripcion.getPerCodigo().getNombreCompleto();

        if (listaPre.size() > 0) {
            RutaCarpetaReporte ruta = new RutaCarpetaReporte();
            String rutaJasper = "", rutaPDF = "";
            rutaJasper = ruta.getRutaReporte() + "rptFichaCarnet.jasper";
//            rutaPDF = ruta.getRuta() + "rptFichaCarnet.pdf";//ruta windows prueba
            rutaPDF  = ruta.getRutaPDFpreInscripcion()+"fichaCarnet/"+nombreFicha+"-FichaCarnet.pdf";

//            rutaPDF = ruta.getRutaPDF() + "rptFichaCarnet.pdf";//ruta linux prueba
            //logo windows:         C:/Reportes/logocipcdll.gif
            //rutaPDF = ruta.getRutaPDF() + "rptFormato.pdf";   //ruta linux server
            //logo linux:          /root/Desktop/pdf/logocipcdll.gif
            try {
                HttpServletRequest request = ControladorAbstracto.getRequest();
                rutaJasper = request.getRealPath(rutaJasper);
            //rutaPDF = request.getRealPath(rutaPDF);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }

            try {
                File entrada = new File(rutaJasper);
                JasperPrint print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaPre));
                if (ruta.generarPDF(rutaPDF, print)) {
                }
            } catch (Exception e) {
                System.out.println("-------" + e.toString());
            }
        } else {
            mostrarMensaje("Error", "Deben existir datos en la Lista para exportar", FacesMessage.SEVERITY_ERROR);
        }
       }catch(Exception ex){
            return null;
      }
        return "";
    }

    //GENERAR FICHA DE CESION DE DERECHOS DE AUTOR EN FORMATO .PDF
    //Y ALMACENARLA EN EL SERVIDOR EN UNA CARPETA ASIGNADA

    @SuppressWarnings("static-access")
    public String documentoConformidad() {

        Map parametros = new HashMap();


        List<Preinscripcion> listaPre = new ArrayList<Preinscripcion>();
        try{
            preInscripcion = new Preinscripcion();
            decano = new Directivos();

            preInscripcion = delegadoPreinscripcion.buscaPreInscripcion(codigoColegiado);
            decano = delegadoDirectivo.buscaDecano();

            listaPre.add(preInscripcion);
            String nombreFicha = preInscripcion.getPerCodigo().getNombreCompleto();

            parametros.put("nombreColegiado", preInscripcion.getPerCodigo().getNombreCompleto());
            parametros.put("dni", preInscripcion.getPerCodigo().getPerNroDNI());
            parametros.put("fecha", preInscripcion.getFechaActual());
            parametros.put("decano", "ING. "+decano.getColCodigo().getPersonaNatural().getNombreCompleto());

       if (listaPre.size() > 0) {
            RutaCarpetaReporte ruta = new RutaCarpetaReporte();
            String rutaJasper = "", rutaPDF = "";
            rutaJasper = ruta.getRutaReporte() + "rptDocumentoConformidad.jasper";
//            rutaPDF = ruta.getRuta() + "rptDocumentoConformidad.pdf";//ruta windows prueba
            rutaPDF = ruta.getRutaPDFpreInscripcion()+"docConformidad/"+nombreFicha+"-DocConformidad.pdf";
//            rutaPDF = ruta.getRutaPDF() + "rptDocumentoConformidad.pdf";//ruta linux prueba
            //logo windows:         C:/Reportes/logocipcdll.gif
            //rutaPDF = ruta.getRutaPDF() + "rptFormato.pdf";   //ruta linux server
            //logo linux:          /root/Desktop/pdf/logocipcdll.gif
            try {
                HttpServletRequest request = ControladorAbstracto.getRequest();
                rutaJasper = request.getRealPath(rutaJasper);
            //rutaPDF = request.getRealPath(rutaPDF);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }

            try {
                File entrada = new File(rutaJasper);
                JasperPrint print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaPre));
                if (ruta.generarPDF(rutaPDF, print)) {
                }
            } catch (Exception e) {
                System.out.println("-------" + e.toString());
            }
        } else {
            mostrarMensaje("Error", "Deben existir datos en la Lista para exportar", FacesMessage.SEVERITY_ERROR);
        }

       }catch(Exception ex){
            return null;
        }
        return "";
    }
// METODO QUE PERMITE MOSTRAR LOS EXITOS O ERRORES DE LOS PROCESOS QUE SE HAN EJECUTADO.
    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }

   
}
